Scale an image which is stored as a byte[] in Java
        Posted  
        
            by Sergio del Amo
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Sergio del Amo
        
        
        
        Published on 2009-08-04T16:01:47Z
        Indexed on 
            2010/05/08
            10:18 UTC
        
        
        Read the original article
        Hit count: 313
        
I upload a file with a struts form. I have the image as a byte[] and I would like to scale it.
FormFile file = (FormFile) dynaform.get("file");
byte[] fileData = file.getFileData(); 
fileData = scale(fileData,200,200);
public byte[] scale(byte[] fileData, int width, int height) {
// TODO 
}
Anyone knows an easy function to do this?
public byte[] scale(byte[] fileData, int width, int height) {
    	ByteArrayInputStream in = new ByteArrayInputStream(fileData);
    	try {
    		BufferedImage img = ImageIO.read(in);
    		if(height == 0) {
    			height = (width * img.getHeight())/ img.getWidth(); 
    		}
    		if(width == 0) {
    			width = (height * img.getWidth())/ img.getHeight();
    		}
    		Image scaledImage = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    		BufferedImage imageBuff = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    		imageBuff.getGraphics().drawImage(scaledImage, 0, 0, new Color(0,0,0), null);
    		ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    		ImageIO.write(imageBuff, "jpg", buffer);
    		return buffer.toByteArray();
    	} catch (IOException e) {
    		throw new ApplicationException("IOException in scale");
    	}
    }
If you run out of Java Heap Space in tomcat as I did, increase the heap space which is used by tomcat. In case you use the tomcat plugin for Eclipse, next should apply:
In Eclipse, choose Window > Preferences > Tomcat > JVM Settings
Add the following to the JVM Parameters section
-Xms256m -Xmx512m
© Stack Overflow or respective owner